﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;

using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BLToolkit.Data;
using BLToolkit.Data.Sql;
using DevComponents.DotNetBar;
using System.Data.SqlClient;

namespace PlatformManagement
{
    public partial class BackupRestoreForm : DevComponents.DotNetBar.Metro.MetroForm
    {
        private bool type;

        public BackupRestoreForm(bool type)
        {
            InitializeComponent();
            this.type = type;
        }


        private void BackupForm_Load(object sender, EventArgs e)
        {
            if (type)
            {
                gb2.Enabled = false;
            }
            else
                gb1.Enabled = false;
        }

        //Thoát
        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //Chọn nơi sẽ lưu dữ cơ sở dữ liệu
        private void btnSaveLocation_Click(object sender, EventArgs e)
        {
          
                ButtonX btn = sender as ButtonX;
                if (btn.Name == "btnSelect")
                {
                    saveFileDialog1.Filter = "(*.bak)|*.bak";
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        txtBackup.Text = saveFileDialog1.FileName;
                    }
                }
                else
                {
                    OpenFileDialog openFileDialog= new OpenFileDialog();
                    openFileDialog.Filter = "(*.bak)|*.bak";
                    if(openFileDialog.ShowDialog()==DialogResult.OK)
                        txtRestore.Text = openFileDialog.FileName;
                }

        
        }
        //Tiến hành sao lưu dữ liệu
        private void btnBackup_Click(object sender, EventArgs e)
        {
            try
            {
               
                if (txtBackup.Text == "")
                    MessageBox.Show("Hãy chọn nơi lưu");
                else
                {
                    var db = new DbManager("DBConnection");
                    db.SetCommand("BACKUP DATABASE platform TO DISK ='" + txtBackup.Text + "'WITH  NOFORMAT,NOINIT,SKIP,STATS = 10");
                    db.ExecuteNonQuery();
                    MessageBox.Show("Sao lưu hoàn thành, tệp tin của bạn được lưu tại " + saveFileDialog1.FileName);
                }

            }

            catch (BLToolkit.Data.Sql.SqlException ex)
            {
                MessageBox.Show("Lỗi: " + ex.Message);

            }
            catch (Exception ex1)
            {
                MessageBox.Show("Lỗi: " + ex1.Message);

            }
        }

       


        //Tiến hành khôi phục lại dữ liệu
        private void btnRestore_Click(object sender, EventArgs e)
        {
            try
            {
               
                if (txtRestore.Text == "")
                    MessageBox.Show("Hãy chọn cơ sở dữ liệu muốn phục hồi trước");
                else
                {
                    var db = new DbManager();
                    db.Connection = new SqlConnection(@"data source=.\sqlexpress;database=master;Integrated Security =  true");
                    string sqlRestore = "ALTER DATABASE platform SET SINGLE_USER WITH ROLLBACK IMMEDIATE ";
                    sqlRestore += " USE master RESTORE DATABASE platform FROM DISK = N\'" + txtRestore.Text + "\'";
                    sqlRestore += " WITH  FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
                    db.SetCommand(sqlRestore);
                    db.ExecuteNonQuery();
                    MessageBox.Show("Phục hồi dữ liệu thành công! ");
                }

            }
            catch (BLToolkit.Data.Sql.SqlException ex)
            {
                MessageBox.Show(ex.Message, "Restore Database");

            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro: " + ex.Message);
            }
        }

       

    }
}
